# 两种形式 -- 乘法表

#
# for形式 
for i in range(1,10):      	  						# 输出9行  （通过end="",使其多行并为一行，变成多列在一行显示）
	for j in range(1,i+1):   						# 每行的等式个数 -- 列数
		print("{}*{}={:2}".format(j,i,i*j),end=' ') # 一行当中的乘法算式，以2宽度右对齐，不换行格式化输出
	print()				    						# 换行

print("--"*35)			     						# 分隔符

for i in range(9,0,-1):       						# 行数个数递减   
	for j in range(1,i+1):  
		print("{}*{}={:2}".format(j,i,i*j),end=" ") 
	print("")


print("--"*35)
print("--"*35)


for i  in range(1,10):
    print("{:8}".format("") * (9 - i),end="")   	 # 输出8宽度的等式(空格补位)，等式的个数总长度，递减
    for j in range(i, 0, -1):                   	 # 每行值个数，递减
        shuchu="{}*{}={:>2}".format(j,i,j*i)    	 # 单个等式的两宽度右对齐，输出格式化
        print("{:8}".format(shuchu),end="")     	 # 等式拼接并左对齐相同的8宽度
    print()                                     	 # 换行

print("--"*35)

for i in range(9,0,-1):
	print("{:<8}".format("") * (9-i),end="")
	for j in range(i,0,-1):
		echo = "{}*{}={:>2}".format(j,i,i*j)
		print("{:<8}".format(echo),end="")
	print()


#
# while 形式


j = 1               								# 定义行数基数为1
while j <= 9:      									# 最高为9行
	i = 1           								# 输出值的基数
	while i <= j:   								# 根据j的值，确定i的输出个数
		print("{}*{}={:2}".format(i,j,j*i),end=" ")
		i += 1
	print("")
	j += 1

print("--"*35)

j = 9
while j > 0:
    i = 1
    while i <= j:
        print("{}*{}={:2}".format(i, j, j * i), end=" ")
        i += 1
    print("")
    j -= 1


print("--"*35)
print("--"*35)


j = 1
while j <= 9:
    print("{:8}".format("") * (9 - j),end="")        # 输出空格 (重点)
    i = j
    while i >0:
        each = "{}*{}={:>2}".format(i, j,j * i)
        print("{:<8}".format(each),end="")
        i -= 1
    print()
    j += 1

print("=" * 40)

j = 9
while j >0:
    print("{:8}".format("") * (9 - j), end="")
    i = j
    while i > 0:
        each = "{}*{}={:>2}".format(i, j, j * i)
        print("{:<8}".format(each), end="")
        i -= 1
    print()
    j -= 1